/*
  数组的实例方法：
     find() 
      作用：根据指定条件，对数组进行查找
      返回：如果找到了，返回第一个满足条件的元素；否则返回undefined
      语法：array.find((item, index, arr) => {
        return true，表示 item 符合条件，返回 item，就结束查找
        return false，则当前item不符合条件，继续查找
      })
 */
// 1. 基本类型
const beauty = ['西施', '貂蝉', '杨玉环', '王昭君', '杨幂']
// 找出 姓杨的 美女 
// const result = beauty.find((item) => {
//   if (item.startsWith('杨')) {
//     return true
//   } else {
//     return false
//   }
// })
// 等同于
// const result = beauty.find((item) => item.startsWith('杨'))
// const result = beauty.find((item) => item.startsWith('古'))
// console.log(result)
// console.log(beauty)

// 四大美女的 腰围 ，找出  腰围 在 50以上的第一个元素
// const waistlines = [55, 43, 70, 58]
// const result = waistlines.find(item => item > 50)
// const result = waistlines.find(item => item > 80)
// console.log(result)
// console.log(waistlines)
// 2. 引用类型
const girls = [
  {
    name: '王昭君',
    height: 170
  }, {
    name: '貂蝉',
    height: 172
  }, {
    name: '西施',
    height: 162
  }, {
    name: '杨玉环',
    height: 169
  }
]
// 找出 身高在 165  及其以上的第一个元素
// const result = girls.find(item => item.height >= 165)
// console.log(result)
// 找出 身高在 180  及其以上的第一个元素
// const result = girls.find(item => item.height >= 180)
// console.log(result)
// if(!result) return

// find的原理
Array.prototype._find = function (callback) {
  for (let i = 0; i < this.length; i++) {
    if (callback(this[i], i, this)) {
      return this[i]
    }
  }
  return undefined
}
const result1 = girls._find(item => item.height >= 165)
console.log(result1)
const result2 = girls._find(item => item.height >= 180)
console.log(result2)


